package com.rrhh.daoimpl;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.rrhh.dao.IGrupoEmpresarialDAO;
import com.rrhh.domain.GrupoEmpresarial;

@Repository
public class GrupoEmpresarialDAOImpl implements IGrupoEmpresarialDAO {

	@Autowired
	SessionFactory sessionFactory;
	
	

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	@Override
	public void insertGrupoEmp(GrupoEmpresarial grupoEmpresarial) {
		// TODO Auto-generated method stub
		
		//sessionFactory.getCurrentSession().save(grupoEmpresarial);
		
		Session s = sessionFactory.openSession();
		s.beginTransaction();
		s.persist(grupoEmpresarial);
		s.getTransaction().commit();
		
	}

	@Override
	public GrupoEmpresarial getByIdGrupoEmpresarial(
			GrupoEmpresarial grupoEmpresarial) {
		// TODO Auto-generated method stub
		GrupoEmpresarial gp = new GrupoEmpresarial();
		gp = (GrupoEmpresarial)sessionFactory.openSession().get(GrupoEmpresarial.class,
				grupoEmpresarial.getIdgrupo_empresarial());
		System.out.println("Retorno: " + gp.getDescripcion());
		return gp;
	}

	// se usa persist, para poder usar el cascadeType.PERSIST, y asi
	// cuando se elimine un direccion la propagacion no eliminara
	// una zona o via, u otro registro asociado
	// save(entity), devuelve el id de la nueva fila insertada,
	// este metodo no garantiza que se ejecuta dentro de la transaccion
	// persist(entity), no devuelve el id insertado, pero si garantiza
	// ejecutarlo
	// dentro de la misma transaccion
	// saveOrUpdate(entity), a diferencia de save()(verifica si existe un id
	// igual antes de insertarlo),
	// este metodo si encuentra un id actualiza los datos sobre esa fila donde
	// hubo coincidencia del id
	// persist(), se toma un flush time!

}
